package interfaz1;

import java.io.*;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.util.*;

public class Seccion<lis_est> {
    // Atributos

    private int n_seccion;
    private Estudiante estud_ins;
    private Profesor prof_asig;
    private boolean presentado = false;
    LinkedList<Estudiante> lis_est;
    LinkedList<Profesor> lis_prof;
    LinkedList<Estudiante> list_aux;

    public Seccion() {
        super();
        // TODO Auto-generated constructor stub
        lis_est = new LinkedList<Estudiante>();
        lis_prof = new LinkedList<Profesor>();
        list_aux = new LinkedList<Estudiante>();
    }

    public Seccion(int n_seccion, Estudiante estud_ins, Profesor prof_asig) {
        super();
        this.n_seccion = n_seccion;
        this.estud_ins = estud_ins;
        this.prof_asig = prof_asig;
        lis_est = new LinkedList<Estudiante>();
        lis_prof = new LinkedList<Profesor>();
        list_aux = new LinkedList<Estudiante>();
    }

    public LinkedList<Profesor> getlis_prof() {
        return lis_prof;
    }

    public LinkedList<Estudiante> getlis_est() {
        return lis_est;
    }

    public int getN_seccion() {
        return n_seccion;
    }

    public void setN_seccion(int n_seccion) {
        this.n_seccion = n_seccion;
    }

    public Estudiante getEstud_ins() {
        return estud_ins;
    }

    public void setEstud_ins(Estudiante estud_ins) {
        this.estud_ins = estud_ins;
    }

    public Profesor getProf_asig() {
        return prof_asig;
    }

    public void setProf_asig(Profesor prof_asig) {
        this.prof_asig = prof_asig;
    }

    public boolean InscribirProfesor(Profesor miprofesor) {
        lis_prof.add(miprofesor);
        setProf_asig(miprofesor);
        return true;
    }

    public void RetirarEstudiante(String ced) {
        ListIterator<Estudiante> it = lis_est.listIterator();
        while (it.hasNext()) {
            Estudiante e = it.next();
            if (e.getCedula().equals(ced)) {
                it.remove();
                break;
            }
        }
    }

    public void EliminarProfesor(String ced) {
        ListIterator<Profesor> it = lis_prof.listIterator();
        while (it.hasNext()) {
            Profesor p = it.next();
            if (p.getCedula().equals(ced)) {
                it.remove();
                break;
            }
        }
    }

    public Estudiante BuscarEstudiante(String ced) {
        Estudiante e=null;
        ListIterator<Estudiante> it = lis_est.listIterator();
        while (it.hasNext()) {
            e = it.next();
            if (e.getCedula().equals(ced)) {
                return e;

            }

        }
        if (e == null) {
            return null;
        } else {
            return e;
        }
    }

    public Profesor BuscarProfesor(String cedu) {
        ListIterator<Profesor> it = lis_prof.listIterator();
        while (it.hasNext()) {
            Profesor p = it.next();
            if (p.getCedula().equals(cedu)) {
                return p;
            }
        }
        return null;
    }

    public boolean InscribirEstudiante(Estudiante miestudiante) {
        lis_est.add(miestudiante);
        return true;
    }

    public void AplicarEvaluacion(Profesor miprofesor) {
        LinkedList<Estudiante> lis = getlis_est();
        ListIterator<Estudiante> it = lis.listIterator();
        System.out.println("Estudiantes Evaluados");
        while (it.hasNext()) {
            Estudiante miestudiante = it.next();
            miestudiante.PresentarEvaluaciones();
            System.out.println(" Cedula:" + miestudiante.getCedula());
            System.out.println(" Nombre:" + miestudiante.getNombre());
            System.out.println(" Apellido:" + miestudiante.getApellido());
            System.out.println(" Nota 1:" + miestudiante.getNota1());
            System.out.println(" Nota 2:" + miestudiante.getNota2());
            System.out.println(" Nota 3:" + miestudiante.getNota3());
            System.out.println(" Nota Final:" + miprofesor.EvaluarEstudiante(miestudiante));
            System.out.println(" Estado :" + miprofesor.AsignarEstado(miestudiante));
            //  return true;
        }
        // return false;
    }

    public void imprimirEstudiantes() {
        LinkedList<Estudiante> lis = getlis_est();
        ListIterator<Estudiante> it = lis.listIterator();
        while (it.hasNext()) {
            Estudiante e = it.next();
            System.out.println(e.getCedula());
            System.out.println(e.getNombre());
            System.out.println(e.getApellido());
            System.out.println(e.getNotaf());
        }
    }

    public void imprimirProfesor() {
        LinkedList<Profesor> lis = getlis_prof();
        ListIterator<Profesor> it = lis.listIterator();
        while (it.hasNext()) {
            Profesor p = it.next();
            System.out.println("\tProfesor Asignado: " + p.getNombre() + " " + p.getApellido());

        }
    }

    public void imprimirAuxiliar() {
        ListIterator<Estudiante> it = list_aux.listIterator();
        while (it.hasNext()) {
            Estudiante e = it.next();
            System.out.println(e.getCedula());
            System.out.println(e.getNombre());
            System.out.println(e.getApellido());
            System.out.println(e.getNotaf());
        }
    }

    public void ListadoAprobados(Estudiante miestudiante, Profesor miprofesor) {
        list_aux = new LinkedList<Estudiante>();
        ListIterator<Estudiante> it = lis_est.listIterator();
        while (it.hasNext()) {
            miestudiante = it.next();
            if (miprofesor.AsignarEstado(miestudiante) == "Aprobado") {
                list_aux.add(miestudiante);
            }

        }
        imprimirAuxiliar();
    }

    public void ListadoReprobados(Estudiante miestudiante, Profesor miprofesor) {
        list_aux = new LinkedList<Estudiante>();
        ListIterator<Estudiante> it = lis_est.listIterator();
        while (it.hasNext()) {
            miestudiante = it.next();
            if (miprofesor.AsignarEstado(miestudiante) == "Reprobado") {
                list_aux.add(miestudiante);
            }
        }
        imprimirAuxiliar();
    }

    public float MostrarPromedio() {
        LinkedList<Estudiante> lis = getlis_est();
        ListIterator<Estudiante> it = lis.listIterator();
        float acum = 0;
        int cont = 0;
        while (it.hasNext()) {
            Estudiante e = it.next();
            acum = acum + e.getNotaf();
            cont = cont + 1;
        }
        return acum / cont;
    }

    public void setPresentado(boolean presentado) {
        this.presentado = presentado;
    }

    public boolean isPresentado() {
        return presentado;
    }

    public int num_alumnos() {
        return lis_est.size();
    }

    public int num_profesor() {
        return lis_prof.size();
    }

    public void listarNotaF(LinkedList<Estudiante> list_est) throws IOException {

        FileOutputStream salida;
        PrintStream ps;
        String nombreArchivo = "listaNotaf.txt";
        String texto = "";
        String texto1 = "";

        salida = new FileOutputStream(nombreArchivo);
        ps = new PrintStream(salida);



        for (int i = 0; i < list_est.size(); i++) {

            texto = (" Cédula: " + list_est.element().getCedula() + " Nombre: " + list_est.element().getNombre() + " Apellido: " + list_est.element().getApellido() + " Nota final: " + list_est.element().getNotaf() + "\n");
            texto1 = texto1 + texto;

            ps.println(texto);
            System.out.println(texto);
        }

        ps.close();

    }
}

